package com.faw.fengyue.rfid.utils.sdkinit;

import static com.xuexiang.xupdate.entity.UpdateError.ERROR.CHECK_NO_NEW_VERSION;

import android.app.Application;
import android.content.Context;
import android.graphics.Color;
import android.util.Log;

import com.faw.fengyue.rfid.R;
import com.faw.fengyue.rfid.constants.HttpConstants;
import com.faw.fengyue.rfid.utils.HProgressDialogUtils;
import com.faw.fengyue.rfid.utils.update.CustomUpdateDownloader;
import com.faw.fengyue.rfid.utils.update.CustomUpdateFailureListener;
import com.faw.fengyue.rfid.utils.update.XHttpUpdateHttpServiceImpl;
import com.xuexiang.xupdate.XUpdate;
import com.xuexiang.xupdate.entity.UpdateError;
import com.xuexiang.xupdate.listener.OnUpdateFailureListener;
import com.xuexiang.xupdate.logs.ILogger;
import com.xuexiang.xupdate.service.OnFileDownloadListener;
import com.xuexiang.xupdate.utils.UpdateUtils;
import com.xuexiang.xutil.common.StringUtils;
import com.xuexiang.xutil.resource.ResUtils;
import com.xuexiang.xutil.tip.ToastUtils;

import java.io.File;

/**
 * 版本更新 初始化
 *
 * @author wdc
 * @since 2024-04-3 15:51
 */
public final class XUpdateInit {

    private XUpdateInit() {
        throw new UnsupportedOperationException("u can't instantiate me...");
    }

    /**
     * 应用版本更新的检查地址
     */
    // TODO: 2021/5/26 需要开启版本更新功能的话，就需要配置一下版本更新的地址
    private static final String KEY_UPDATE_URL = "http://192.168.1.113:9527/owc/version/last";

    public static void init(Application application) {
        XUpdate.get()
                .debug(true)
                //默认设置只在wifi下检查版本更新
                .isWifiOnly(true)
                //默认设置使用get请求检查版本
                .isGet(true)
                //默认设置非自动模式，可根据具体使用配置
                .isAutoMode(false)
                //设置默认公共请求参数
                .param("versionCode", UpdateUtils.getVersionCode(application))
                .param("appKey", HttpConstants.getInstance().getAppKey())
                .setILogger(new ILogger() {
                    @Override
                    public void log(int priority, String tag, String message, Throwable t) {
                        //实现日志记录功能
                        Log.d(tag,message);
                    }
                })
                //设置版本更新出错的监听
                .setOnUpdateFailureListener(new OnUpdateFailureListener() {
                    @Override
                    public void onFailure(UpdateError error) {
                        //对不同错误进行处理
                        if (error.getCode() != CHECK_NO_NEW_VERSION) {
                            ToastUtils.toast(error.toString());
                        }
                    }
                })
                //设置是否支持静默安装，默认是true
                .supportSilentInstall(true)
                //这个必须设置！实现网络请求功能。
                .setIUpdateHttpService(new XHttpUpdateHttpServiceImpl())
                .setIUpdateDownLoader(new CustomUpdateDownloader())
                //这个必须设置！实现网络请求功能。
                .init(application);
    }

    /**
     * 进行版本更新检查
     */
    public static void checkUpdate(Context context, boolean needErrorTip) {
        checkUpdate(context, KEY_UPDATE_URL, needErrorTip);
    }

    /**
     * 进行版本更新检查
     *
     * @param context      上下文
     * @param url          版本更新检查的地址
     * @param needErrorTip 是否需要错误的提示
     */
    public static void checkUpdate(Context context, String url, boolean needErrorTip) {
        if (StringUtils.isEmpty(url)) {
            return;
        }
        Log.d("检查版本", "最新版本请求：" + url);
        XUpdate.newBuild(context)
                .updateUrl(url)
                .promptThemeColor(ResUtils.getColor(R.color.xupdate_blue_theme_color))
                .promptButtonTextColor(Color.WHITE)
                .promptWidthRatio(0.7F)
                .update();
        XUpdate.get().setOnUpdateFailureListener(new CustomUpdateFailureListener(needErrorTip));
    }
}
